package com.fyyg.common.util;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;

import com.alibaba.fastjson.JSONObject;

public class SafetyUtils {
	
	
	// app key
	public static final String APP_KEY="74ca6adda41ff93e2c9c54b08492ddfe";
	
	//加密盐值
	public static final String SIGN_KEY="08622aba0c3e6b01d209cea0220c13bb";

	
	/**
	 * 验证秘钥,api接口
	 * @param sign 秘钥
	 * @param objects  参数
	 * @return
	 */
	public  static boolean  verificationSign(String sign, Object...objects){
		if(StringUtils.isEmpty(sign)){
			return false;
		}
		if(sign.equals(createSign2(objects))){
			return true;
		}
		return false;
	}
	 /** 密钥生成，api接口
	 * @param objects 传入请求参数
	 * @return 传入请求参数+加密盐值= MD5 之后的内容
	 */
	private static String  createSign2(Object...objects){
		if(objects!=null  && objects.length>0){
			StringBuffer sign=new StringBuffer();
			for(int i=0;i<objects.length;i++){
				sign.append(objects[i]);
			}
			//sign.append(SIGN_KEY);
			//System.out.println(MD5.enCode(sign.toString()));
			return  MD5.enCode(sign.toString());
		}
		throw new RuntimeException("生成密钥字段不能为空");
	}
	
	
	/**
	 * 验证秘钥
	 * @param sign 秘钥
	 * @param objects  参数
	 * @return
	 */
	public  static boolean  verificationSign(HttpServletRequest request,String sign, Object...objects){
		String type=request.getParameter("wapType");
		if(type!=null && type.equals("html")){ //微信跳过验证
			return true;
		}
		if(StringUtils.isEmpty(sign)){
			return false;
		}
		String sign_ = createSign(objects);
		System.out.println(sign_);
		if(sign.equals(createSign(objects))){
			return true;
		}
		return false;
	}
	
	/**
	 * 密钥生成
	 * @param objects 传入请求参数
	 * @return 传入请求参数+加密盐值= MD5 之后的内容
	 */
	public static String  createSign(Object...objects){
		if(objects!=null  && objects.length>0){
			StringBuffer sign=new StringBuffer();
			for(int i=0;i<objects.length;i++){
				sign.append(objects[i]);
			}
			sign.append(APP_KEY);
			//System.out.println(MD5.enCode(sign.toString()));
			return  MD5.enCode(sign.toString());
		}
		throw new RuntimeException("生成密钥字段不能为空");
	}
	
	
	/**
	 * 封装返回
	 * @param status
	 * @param message
	 * @param data
	 * @return
	 */
	public static String  createSimpleReturn(String status,String message){
		JSONObject json=new JSONObject();
		json.put("status", status);
		json.put("message", message);
		//System.out.println(json.toString());
		return json.toString();
	}
	
	
	/**
	 * 封装返回
	 * @param status
	 * @param message
	 * @param data
	 * @return
	 */
	public static String  createBeanReturn(String status,String message,Object data){
		JSONObject json=new JSONObject();
		json.put("status", status);
		json.put("message", message);
		json.put("data", data);
		data = null;
		return json.toString();
	}
	/**
	 * 封装返回
	 * @param status
	 * @param message
	 * @param data
	 * @return
	 */
	public static JSONObject  createSimpleReturnjson(String status,String message){
		JSONObject json=new JSONObject();
		json.put("status", status);
		json.put("message", message);
		//System.out.println(json.toString());
		return json;
	}
	
	
	/**
	 * 封装返回
	 * @param status
	 * @param message
	 * @param data
	 * @return
	 */
	public static JSONObject  createBeanReturnjson(String status,String message,Object data){
		JSONObject json=new JSONObject();
		json.put("status", status);
		json.put("message", message);
		json.put("data", data);
		data = null;
		return json;
	}
	/**
	 * 
	 * @param status
	 * @param message
	 * @param pageSize   	页大小
	 * @param pageNumber	页码
	 * @param pageCount		总页数
	 * @param totalCount	总条数
	 * @param data
	 * @return
	 */
	public static String  createListReturn(String status,String message,int pageSize,int pageNumber,int pageCount,int totalCount ,Object data){
		JSONObject json=new JSONObject();
		json.put("status", status);
		json.put("message", message);
		json.put("pageSize", pageSize);
		json.put("pageNumber", pageNumber);
		json.put("pageCount", pageCount);
		json.put("totalCount", totalCount);
		json.put("data", data);
		data = null;
		return json.toString();
	}
	
	
}
